import axios from 'axios'
import store from '@/store'
import { Message } from 'element-ui'
import router from '@/router'

// 创建一个自定的axios方法(比原axios多了个基地址)
// axios函数请求的url地址前面会被拼接基地址, 然后axios请求baseURL+url后台完整地址
const myAxios = axios.create({
  baseURL: 'http://big-event-vue-api-t.itheima.net'
})

// 正常接口方法里, 在函数里请求headers参数需要写多个, 要修改需要改多处, 所以我们决定在请求拦截器统一携带
// 定义请求拦截器
myAxios.interceptors.request.use(
  function (config) {
    // config里有headers字段
    // 为请求头挂载Authorization
    // console.log(config);
    const token = store.state.token
    if (token) {
      config.headers.Authorization = store.state.token
    }
    return config
  },
  function (error) {
    return Promise.reject(error)
  }
)

// 定义响应拦截器
myAxios.interceptors.response.use(
  function (response) {
    return response
  },
  function (error) {
    console.log(error)
    if (error.response.status === 401) {
      store.commit('updateToken', '')
      store.commit('updateUserInfo', {})
      router.push('/login')
      Message.error('登录信息已过期')
    }
    return Promise.reject(error)
  }
)
// 导出自定义的axios方法, 供外面调用传参发请求
export default myAxios
